// test_rag.js - 测试RAG功能
const mongoose = require('mongoose');
const dotenv = require('dotenv');
const path = require('path');

// 加载环境变量
const envPath = path.resolve(__dirname, '.env');
dotenv.config({ path: envPath });

// 连接数据库
const mongoUri = process.env.MONGO_URI;
if (!mongoUri) {
    console.error('MONGO_URI未设置');
    process.exit(1);
}

mongoose.connect(mongoUri);

const KnowledgePoint = require('./src/models/KnowledgePoint');

// 测试数据
const testKnowledgePoints = [
    {
        title: "React Hooks介绍",
        content: "React Hooks是React 16.8版本引入的新特性，它允许你在不编写class的情况下使用state以及其他的React特性。Hooks是一些可以让你在函数组件里'钩入' React state及生命周期等特性的函数。最常见的Hooks包括useState、useEffect、useContext等。使用Hooks可以让你在函数组件中使用类组件的特性，同时还能解决类组件中的一些问题，比如组件逻辑复用困难、this指向问题等。"
    },
    {
        title: "Vue Composition API",
        content: "Vue Composition API是Vue 3.0中引入的新特性，它是对Vue 2.x中Options API的一种补充。Composition API提供了一种更灵活的方式来组织和重用组件逻辑。它允许开发者使用函数的方式而不是声明选项来组织组件代码。通过setup函数，开发者可以更好地组织代码逻辑，提高代码的可读性和可维护性。Composition API的核心思想是将相关的逻辑组织在一起，而不是按照选项类型分散在不同的选项中。"
    },
    {
        title: "JavaScript异步编程",
        content: "JavaScript异步编程是JavaScript中非常重要的一部分。在JavaScript中，异步编程主要通过回调函数、Promise、async/await等方式来实现。回调函数是最基础的异步编程方式，但容易导致回调地狱问题。Promise是ES6引入的异步编程解决方案，它通过链式调用的方式解决了回调地狱问题。async/await是ES2017引入的异步编程语法糖，它让异步代码看起来像同步代码，提高了代码的可读性。理解异步编程对于前端开发非常重要，因为它涉及到网络请求、定时器、事件处理等场景。"
    }
];

async function testRAG() {
    try {
        console.log("开始测试RAG功能...");
        
        // 清空现有的测试数据（可选）
        // await KnowledgePoint.deleteMany({});
        
        // 插入测试知识点
        console.log("插入测试知识点...");
        for (const kp of testKnowledgePoints) {
            const newKp = new KnowledgePoint({
                title: kp.title,
                content: kp.content,
                user: "test_user_id" // 测试用用户ID
            });
            
            const savedKp = await newKp.save();
            console.log(`知识点 "${kp.title}" 已保存，ID: ${savedKp._id}`);
            
            // 模拟添加到向量库的过程
            console.log(`为知识点 "${kp.title}" 创建向量表示...`);
            // 这里应该调用addKnowledgePointToStore函数
            // 但由于我们是在测试环境中，暂时跳过这一步
        }
        
        console.log("测试数据插入完成！");
        console.log("请启动服务器并使用POST /api/rag/search接口测试搜索功能。");
        
        // 断开数据库连接
        await mongoose.disconnect();
        console.log("数据库连接已断开。");
        
    } catch (error) {
        console.error("测试过程中出现错误:", error);
        await mongoose.disconnect();
    }
}

// 运行测试
testRAG();